package com.eqxiu.ieditor.weixin.api;

import java.util.Map;

import com.eqxiu.ieditor.weixin.dto.AccessToken;
import com.eqxiu.ieditor.weixin.dto.JsTicket;
import com.eqxiu.ieditor.weixin.dto.QrTicket;

/**
 * 
 * @description 微信服务
 * @author ranger
 * @modified DuYoulong 重构
 * @date May 26, 2017
 */

public interface WeiXinServiceApi {
    /**
     * 
     * @description 通过db查询appid对应的app secret,获取access token,缓存7000秒
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @return
     */
    public AccessToken getAccessToken(String appId);

    /**
     * 通过code获取access_token,缓存7000秒
     * 
     * @param appid
     *            应用唯一标识
     * @param code
     * @return
     */
    public AccessToken getAccessToken(String appid, String code);

    /**
     * 
     * @description 通过code[String]获取有效期为7天的ticket
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param sceneCode
     * @return
     */
    public QrTicket getLimitTicket(String appId, String sceneCode);

    /**
     * 
     * @description 通过code[String]获取有效期为7天的ticket
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param sceneCode
     * @return
     */
    public JsTicket getJsTicket(String appId, String type);

    /**
     * 
     * @description 通过id[String]获取有效期为7天的ticket
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param sceneId
     * @return
     */
    public QrTicket getLimitTicket(String appId, long sceneId);

    /**
     * 
     * @description 获取无限制的ticket,只能获取100000个
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param sceneCode
     * @return
     */
    public QrTicket getUnlimitTicket(String appId, String sceneCode);

    /**
     * 
     * @description 获取无限制的ticket,只能获取100000个
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param sceneId
     * @return
     */
    public QrTicket getUnlimitTicket(String appId, long sceneId);

    /**
     * 
     * @description 处理微信通知,可以在通知进行统计/发送消息等
     * @author ranger
     * @date Jul 10, 2017
     * @modified by xxx 修改说明
     * @param content
     * @return 
     * @throws Exception
     */
    public String processNotify(String content) throws Exception;

    /**
     * 
     * @description 根据token和openid获取用户信息
     * @author ranger
     * @date Aug 3, 2017
     * @modified by xxx 修改说明
     * @param accessToken
     * @param openId
     * @return
     * @throws Exception
     */
    public String getUserInfo(String accessToken, String openId) throws Exception;

    /**
     * 
     * @description oauth 根据code获取openid
     * @author ranger
     * @date Aug 3, 2017
     * @modified by xxx 修改说明
     * @param appId
     * @param code
     * @return
     * @throws Exception 
     */
    public String getOAuthOpenId(String appId, String code) throws Exception;

    /**
     * 
     * @description 签名
     * @author ranger
     * @date Jul 26, 2017
     * @modified by xxx 修改说明
     * @param url
     * @return
     */
    public Map<String, String> signJsApi(String appId, String url);

}
